![ECRがライフサイクルポリシーでワイルドカード(*)をサポートするようになりました](https://devio2023-media.developers.io/wp-content/uploads/2023/08/amazon-ec2-container-registry.png)
ECRがライフサイクルポリシーでワイルドカード(*)をサポートするようになりました
こんにちは、岩城です。
本日、表題のアップデートがありましたので紹介します。
忙しい人向けまとめ
- ライフサイクルポリシーに`タグ付き(ワイルドカードマッチング)が追加された
- ワイルドカードに指定できるのは
*(アスタリスク)
のみ - 1つのタグに含められるワイルドカードは3つまで、4つ登録しようとするとエラーになる
- 従来の
タグ付け済み
は`タグ付き(プレフィックマッチング)というメニューに変わった - CloudFormationにも対応している
やってみた
マネジメントコンソール
実際にやってみます。
本エントリでは検証用にリポジトリを作成しました。レポジトリの作成が終わったらライフサイクルポリシーの画面に遷移し、ルールを作成します。
イメージのステータスにタグ付き(ワイルドカードマッチング)
が追加され、従来のタグ付け済み
からタグ付け(プレフィックマッチング)
に変わっていました。
ワイルドカードマッチング用のタグ指定フォームに、ワイルドカード含むタグの文字列のリストを指定します。
なお、コンソールに記載はありませんが、公式ドキュメントに1つのタグに含められるワイルドカードは3つまで、4つ以上は無効と記載がありました。
この点の動作確認も行うため、以下のタグパターンを指定するライフサイクルポリシーをそれぞれ作成しました。
prod*
test-1*linux
test-2*1*2*3
test-3*1*2*3*
test-4*1*2*3*4*
単一のライフサイクルポリシーで複数タグを指定することもできるのですが、指定したタグすべてに一致するイメージが対象となります。
感覚的には、どれか一つでも該当するイメージが対象となるような気がするかも知れませんが、そうではないので注意しましょう(私はハマりました)。
test-4*1*2*3*4*
を指定したライフサイクルポリシー作成しようとすると、
Invalid parameter at 'LifecyclePolicyText' failed to satisfy constraint: 'Lifecycle policy validation failure: Invalid tag pattern provided. Total number of * must not exceed 4'
とエラーが出力されました。ドキュメントどおりですね。
検証用のライフサイクルポリシーの準備が整いました。
指定したタグに合うように適当にイメージをプッシュして動作確認をします。なお、本エントリでは動作確認をすぐ行うため、ライフサイクルルールで保存するイメージ数を1つとしています。
実はライフサイクルルールはルールに一致したイメージがあっても即座に当該イメージを削除せず、24時間以内に削除するというふわっとした仕様です。
すぐに動作確認したいので、テストライフサイクルールの機能を使い、DryRunして意図した動作になるか確認します。
私のイメージタグの命名センスが絶望的で分かりづらいのですが、古いイメージが各ルールによって選出されているのが分かると思います。
CloudFormation
CloudFortmationにも対応しているのを確認しました。
AWSTemplateFormatVersion: 2010-09-09 Description: test lifecycle policy Resources: Repository: Type: AWS::ECR::Repository Properties: EncryptionConfiguration: EncryptionType: KMS ImageTagMutability: IMMUTABLE LifecyclePolicy: LifecyclePolicyText: | { "rules": [ { "rulePriority": 1, "description": "CloudFormation", "selection": { "tagStatus": "tagged", "tagPatternList": ["test5*"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] } RegistryId: !Ref AWS::AccountId RepositoryName: devio-test-iwaki-2
おわりに
私自身、普段コミットハッシュ値をそのままタグに指定しているので、タグの文字列を気にしてライフサイクルルールを作成したことがありませんでした。
検証する上でワイルドカードマッチングやプレフィックスマッチング、単一のライフサイクルルールないで複数タグ指定は想像していた動作じゃなかったりと、色々と知れて良かったです。
本エントリがどなたかのお役に立てれば幸いです。